package com.cl.unipay4j.core;

import com.cl.unipay4j.core.pay.INotify;
import com.cl.unipay4j.core.pay.IPayment;
import com.cl.unipay4j.core.pay.IQuery;
import com.cl.unipay4j.core.pay.IRefund;
import com.cl.unipay4j.core.transfer.ITransfer;
import com.cl.unipay4j.core.transfer.ITransferQuery;

/**
 * 支付工厂类
 *
 * @author siashan
 * @since v1.0.1
 **/
public interface IPayFactory {

    /**
     * 方法描述: 生成payment
     *
     * @param tradeType   交易类型
     * @return com.weixing.mall.pay.IPayment
     */
    IPayment getPayment(String tradeType);

    /**
     * 方法描述:  生成payment
     *
     * @param tradeType  交易类型
     * @param payConfig  支付配置
     * @return com.cl.unipay4j.core.pay.IPayment
     */
    IPayment getPayment(String tradeType, IPayConfig payConfig);


    /**
     * 方法描述: 获取查询类
     *
     * @return com.cl.unipay.core.IQuery
     */
    IQuery getQuery();

    /**
     * 获取查询类
     *
     * @param payConfig   支付配置
     * @return 查询类
     */
    IQuery getQuery(IPayConfig payConfig);

    /**
     * 方法描述: 获取异步通知类
     *
     * @return com.cl.unipay.core.INotify
     */
    INotify getNotify();

    /**
     * 获取异步通知类
     *
     * @param payConfig   支付配置
     * @return 通知类
     */
    INotify getNotify(IPayConfig payConfig);

    /**
     * 获取转账类
     *
     * @return 转账类
     */
    ITransfer getTransfer();

    /**
     * 获取转账类
     *
     * @param payConfig  支付配置
     * @return 转账类
     */
    ITransfer getTransfer(IPayConfig payConfig);

    /**
     * 获取转账类
     *
     * @return 转账查询类
     */
    public ITransferQuery getTransferQuery();

    /**
     * 获取转账查询类
     *
     * @param payConfig 支付配置
     * @return 转账查询类
     */
    public ITransferQuery getTransferQuery(IPayConfig payConfig);

    /**
     * 获取退款类
     *
     * @return 退款类
     */
    public IRefund getRefund();

    /**
     * 获取退款类
     *
     * @param payConfig  支付配置
     * @return 退款类
     */
    public IRefund getRefund(IPayConfig payConfig);

}
